"""mysqlpass项目主入口文件"""

import argparse
import sys
from src.controller.app_controller import app_controller
from src.logger import logger

def main():
    """mysqlpass项目主函数"""
    logger.info("程序启动")
    
    # 创建命令行参数解析器
    parser = argparse.ArgumentParser(description='自由使用的MySql工具!!  Freedam')
    parser.add_argument('--version', action='store_true', help='显示版本信息')
    parser.add_argument('--gui', action='store_true', help='启动图形用户界面')
    
    # 创建子命令解析器
    subparsers = parser.add_subparsers(dest='command', help='可用命令')
    
    # 添加密码命令
    add_parser = subparsers.add_parser('add', help='添加MySQL连接密码')
    add_parser.add_argument('name', help='连接配置名称')
    add_parser.add_argument('--host', default='localhost', help='MySQL主机地址')
    add_parser.add_argument('--port', default='3306', help='MySQL端口号')
    add_parser.add_argument('--user', required=True, help='MySQL用户名')
    add_parser.add_argument('--password', required=True, help='MySQL密码')
    
    # 获取密码命令
    get_parser = subparsers.add_parser('get', help='获取MySQL连接密码')
    get_parser.add_argument('name', help='连接配置名称')
    
    # 列出所有密码命令
    list_parser = subparsers.add_parser('list', help='列出所有MySQL连接配置')
    
    # 删除密码命令
    delete_parser = subparsers.add_parser('delete', help='删除MySQL连接密码')
    delete_parser.add_argument('name', help='连接配置名称')
    
    # 解析命令行参数
    args = parser.parse_args()
    logger.debug(f"解析命令行参数: {args}")
    
    # 处理命令行参数
    if args.version:
        logger.info("显示版本信息: mysqlpass v1.0.0")
        print("mysqlpass v1.0.0")
        return
    
    # 启动GUI界面
    if args.gui:
        try:
            logger.info("启动图形用户界面")
            from src.gui import run_gui
            print("正在启动图形用户界面...")
            run_gui()
        except ImportError as e:
            logger.error(f"启动图形界面失败: {e}")
            print(f"启动图形界面失败: {e}")
            print("请确保GUI模块已正确安装")
            sys.exit(1)
        return
    
    # 处理命令行子命令
    if args.command == 'add':
        logger.info(f"添加MySQL连接配置: {args.name}")
        if app_controller.add_connection(args.name, args.host, args.port, args.user, args.password):
            logger.info(f"成功添加MySQL连接配置: {args.name}")
            print(f"成功添加MySQL连接配置: {args.name}")
        else:
            logger.error(f"添加MySQL连接配置失败: {args.name}")
            print(f"添加MySQL连接配置失败: {args.name}")
            sys.exit(1)
    elif args.command == 'get':
        logger.info(f"获取MySQL连接配置: {args.name}")
        config = app_controller.get_connection(args.name)
        if config:
            logger.info(f"成功获取连接配置: {args.name}")
            print(f"连接配置: {args.name}")
            print(f"主机: {config['host']}")
            print(f"端口: {config['port']}")
            print(f"用户名: {config['username']}")
            print(f"密码: {config['password']}")
        else:
            logger.warning(f"未找到连接配置: {args.name}")
            print(f"未找到连接配置: {args.name}")
            sys.exit(1)
    elif args.command == 'list':
        logger.info("列出所有MySQL连接配置")
        configs = app_controller.list_connections()
        if configs:
            logger.info(f"找到{len(configs)}个连接配置")
            print("已保存的MySQL连接配置:")
            for config in configs:
                print(f"  - {config}")
        else:
            logger.info("暂无保存的MySQL连接配置")
            print("暂无保存的MySQL连接配置")
    elif args.command == 'delete':
        logger.info(f"删除MySQL连接配置: {args.name}")
        if app_controller.delete_connection(args.name):
            logger.info(f"成功删除连接配置: {args.name}")
            print(f"成功删除MySQL连接配置: {args.name}")
        else:
            logger.warning(f"删除连接配置失败: {args.name} (配置不存在)")
            print(f"删除MySQL连接配置失败: {args.name} (配置不存在)")
            sys.exit(1)
    else:
        logger.info("未指定命令，显示帮助信息")
        # 如果没有指定命令，显示欢迎信息和帮助
        print("欢迎使用mysqlpass - 自由使用的MySql工具!!  Freedam")
        print("================================")
        print("使用方法:")
        print("  python main.py --gui          # 启动图形用户界面")
        print("  python main.py --version      # 显示版本信息")
        print("  python main.py <command> --help  # 查看命令帮助")
        print("")
        print("可用命令:")
        print("  add      添加MySQL连接密码")
        print("  get      获取MySQL连接密码")
        print("  list     列出所有MySQL连接配置")
        print("  delete   删除MySQL连接密码")

if __name__ == "__main__":
    try:
        # 默认启动GUI界面，除非指定了其他命令行参数
        if len(sys.argv) == 1:
            sys.argv.append('--gui')
        main()
    except Exception as e:
        logger.error(f"程序运行异常: {e}")
        # 显示错误消息窗口
        import tkinter as tk
        from tkinter import messagebox
        root = tk.Tk()
        root.withdraw()  # 隐藏主窗口
        messagebox.showerror("程序错误", f"程序运行异常: {str(e)}")
        raise